<!DOCTYPE html>
<html>
<!--
  Copyright 2015 The Chromium Authors. All rights reserved.
  Use of this source code is governed by a BSD-style license that can be
  found in the LICENSE file.
-->
<head>
<title>IDB Test that reading a blob from the database does send an ack back to browser process</title>
<script src="common.js"></script>
<script>

// Constants.
var store_name = 'blobs_ack';
var blob_key = 'blob_key';
var blob_size = 200;

// Shared variables.
var db;
var put_blob;

function test() {
  indexedDBTest(prepareDatabase, putBlob);
}

function prepareDatabase() {
  db = event.target.result;
  db.createObjectStore(store_name);
}

function putBlob() {
  debug("Writing blob.");

  var trans = db.transaction(store_name, 'readwrite');
  trans.onabort = unexpectedAbortCallback;
  trans.oncomplete = getBlob;

  var data = new Array(1 + blob_size).join("X");
  put_blob = new Blob([data]);
  var request = trans.objectStore(store_name).put(put_blob, blob_key);
  request.onerror = unexpectedErrorCallback;
}

function getBlob() {
  debug("Deleting blob.");
  put_blob = undefined; // So that the blob can be GC'd
  var trans = db.transaction(store_name, 'readonly');
  trans.onabort = unexpectedAbortCallback;
  trans.oncomplete = onGetComplete;

  var request = trans.objectStore(store_name).get(blob_key);
  request.onerror = unexpectedErrorCallback;
}

function onGetComplete() {
  gc();
  done();
}

</script>
</head>
<body onLoad="test()">
  <div id="status">Starting...<br>
    <p>Run this test with --js-flags=--expose-gc when run from Chrome.</p>
  </div>
</body>
</html>
